/*********************************************************************************
* Copyright (c) zhujinyang.
* All rights reserved.
*
* @file
*
* ϵͳ����TICKģ��.
*
* 
*********************************************************************************/
#include "os_inc.h"
#include "os_gvar.h"
#include "os_sched.h"
#include "os_irq.h"
#include "os_wait.h"
#include "os_sys_idle.h"





/********************************************************************************
* ģ��궨��
********************************************************************************/







/********************************************************************************
* ģ���������
********************************************************************************/



/**********************************************************************************
* @brief:     ��ȡ����ϵͳTICK
* @param[in]: NONE
* @return:    TICKֵ
* @note:      OS�ڲ�������Ҫ����
**********************************************************************************/
INT32U os_sys_tick_get_time(void)
{
    return g_os_systick_count[0];
}



/**********************************************************************************
* @brief:     ϵͳtick��������
* @param[in]: none
* @return:    none
* @note:      ����ϵͳʱ�ӽ����ж��е�����
**********************************************************************************/
void os_sys_tick_handler(void)
{
    INT32U    cpu_sr;
    INT32U    coreid = os_port_coreid();
    
    os_enter_irq(coreid);
    
    cpu_sr = os_spinlock_irqsave();
    
    g_os_systick_count[coreid]++;
    os_wait_tick_handler(coreid);
    os_sched_tick_handler(coreid);
    
    os_spinunlock_irqrestore(cpu_sr);
    
    os_exit_irq(coreid);
}





/**********************************************************************************
* @brief:     ϵͳTICKģ���ʼ��
* @param[in]: none
* @return:    true/false
* @note:      OS�ڲ�������Ҫ����
**********************************************************************************/
void os_sys_tick_init(void)
{
    INT8U i;
    
    for (i = 0; i < OS_CORE_NBR; i++) { 
        g_os_systick_count[i] = 0;
    }
}







